package com.framework.util;


public abstract class CalculoMedico {

	
	public static Integer calcularRiesgoCardioVascular(String sexo,
			Integer edad, Integer ct, Integer hdl, Double taSistolica,
			Boolean tratamiento, Boolean tabaquismo) {
		Integer puntos = 0;
		
		puntos += calcularPunto1(sexo, edad);
		puntos += calcularPunto2(sexo, edad, ct);
		puntos += calcularPunto3(sexo, hdl);
		puntos += calcularPunto4(sexo, taSistolica, tratamiento);
		puntos += calcularPunto5(sexo, edad, tabaquismo);
		return puntos;
	}

	public static String[] convertirPuntosFramingham(String sexo, Integer puntos) {
		String [] r = new String[2];
		if (sexo.equalsIgnoreCase("M")) {
			if (puntos < 0) {
				r[0] = "< 1%";
				r[1] = "0";
			} else if (puntos >= 0 && puntos <= 4) {
				r[0] = "1%";
				r[1] = "0";
			} else if (puntos >= 5 && puntos <= 6) {
				r[0] = "2%";
				r[1] = "0";
			} else if (puntos == 7) {
				r[0] = "3%";
				r[1] = "0";
			} else if (puntos == 8) {
				r[0] = "4%";
				r[1] = "0";
			} else if (puntos == 9) {
				r[0] = "5%";
				r[1] = "0";
			} else if (puntos == 10) {
				r[0] = "6%";
				r[1] = "0";
			} else if (puntos == 11) {
				r[0] = "8%";
				r[1] = "0";
			} else if (puntos == 12) {
				r[0] = "10%";
				r[1] = "0";
			} else if (puntos == 13) {
				r[0] = "12%";
				r[1] = "1";
			} else if (puntos == 14) {
				r[0] = "16%";
				r[1] = "1";
			} else if (puntos == 15) {
				r[0] = "20%";
				r[1] = "1";
			} else if (puntos == 16) {
				r[0] = "25%";
				r[1] = "2";
			} else if (puntos >= 17) {
				r[0] = ">= 30%";
				r[1] = "2";
			}
		} else if (sexo.equalsIgnoreCase("F")) {
			if (puntos < 9) {
				r[0] = "< 1%";
				r[1] = "0";
			} else if (puntos >= 9 && puntos <= 12) {
				r[0] = "1%";
				r[1] = "0";
			} else if (puntos >= 13 && puntos <= 14) {
				r[0] = "2%";
				r[1] = "0";
			} else if (puntos == 15) {
				r[0] = "3%";
				r[1] = "0";
			} else if (puntos == 16) {
				r[0] = "4%";
				r[1] = "0";
			} else if (puntos == 17) {
				r[0] = "5%";
				r[1] = "0";
			} else if (puntos == 18) {
				r[0] = "6%";
				r[1] = "0";
			} else if (puntos == 19) {
				r[0] = "8%";
				r[1] = "0";
			} else if (puntos == 20) {
				r[0] = "11%";
				r[1] = "1";
			} else if (puntos == 21) {
				r[0] = "14%";
				r[1] = "1";
			} else if (puntos == 22) {
				r[0] = "18%";
				r[1] = "1";
			} else if (puntos == 23) {
				r[0] = "22%";
				r[1] = "2";
			} else if (puntos == 24) {
				r[0] = "27%";
				r[1] = "2";
			} else if (puntos >= 25) {
				r[0] = ">= 30%";
				r[1] = "2";
			}
		}
		return r;
	}

	private static Integer calcularPunto1(String sexo, Integer edad) {
		Integer puntos = 0;

		Integer[] puntosH = { -9, -4, 0, 3, 6, 8, 10, 11, 12, 13 };
		Integer[] puntosM = { -7, -3, 0, 3, 6, 8, 10, 12, 14, 16 };

		if (edad >= 20 && edad <= 34) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[0];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[0];
			}
		} else if (edad >= 35 && edad <= 39) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[1];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[1];
			}
		} else if (edad >= 40 && edad <= 44) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[2];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[2];
			}
		} else if (edad >= 45 && edad <= 49) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[3];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[3];
			}
		} else if (edad >= 50 && edad <= 54) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[4];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[4];
			}
		} else if (edad >= 55 && edad <= 59) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[5];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[5];
			}
		} else if (edad >= 60 && edad <= 64) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[6];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[6];
			}
		} else if (edad >= 65 && edad <= 69) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[7];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[7];
			}
		} else if (edad >= 70 && edad <= 74) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[8];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[8];
			}
		} else if (edad >= 75 && edad <= 79) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[9];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[9];
			}
		}
		return puntos;
	}

	private static Integer calcularPunto2(String sexo, Integer edad, Integer ct) {
		Integer puntos = 0;
		Integer[][] puntosCTH = { { 0, 0, 0, 0, 0 }, { 4, 3, 2, 1, 0 },
				{ 7, 5, 3, 1, 0 }, { 9, 6, 4, 2, 1 }, { 11, 8, 5, 3, 1 } };
		Integer[][] puntosCTM = { { 0, 0, 0, 0, 0 }, { 4, 3, 2, 1, 1 },
				{ 8, 6, 4, 2, 1 }, { 11, 8, 5, 3, 2 }, { 13, 10, 7, 4, 2 } };

		Integer rct = 0;
		if (ct < 160) {
			rct = 0;
		} else if (ct >= 160 && ct <= 199) {
			rct = 1;
		} else if (ct >= 200 && ct <= 239) {
			rct = 2;
		} else if (ct >= 240 && ct <= 279) {
			rct = 3;
		} else if (ct >= 280) {
			rct = 4;
		}

		if (edad >= 20 && edad <= 39) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosCTH[rct][0];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosCTM[rct][0];
			}
		} else if (edad >= 40 && edad <= 49) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosCTH[rct][1];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosCTM[rct][1];
			}
		} else if (edad >= 50 && edad <= 59) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosCTH[rct][2];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosCTM[rct][2];
			}
		} else if (edad >= 60 && edad <= 69) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosCTH[rct][3];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosCTM[rct][3];
			}
		} else if (edad >= 70 && edad <= 79) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosCTH[rct][4];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosCTM[rct][4];
			}
		}

		return puntos;
	}

	private static Integer calcularPunto3(String sexo, Integer hdl) {
		Integer puntos = 0;
		Integer[] puntosH = { -1, 0, 1, 2 };
		Integer[] puntosM = { -1, 0, 1, 2 };
		if (hdl >= 60) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[0];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[0];
			}
		} else if (hdl >= 50 && hdl <= 59) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[1];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[1];
			}
		} else if (hdl >= 40 && hdl <= 49) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[2];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[2];
			}
		} else if (hdl < 40) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[3];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[3];
			}
		}

		return puntos;
	}

	private static Integer calcularPunto4(String sexo, Double taSistolica,
			Boolean tratamiento) {
		Integer puntos = 0;
		Integer[][] puntosH = { { 0, 0, 1, 1, 2 }, { 0, 1, 2, 2, 3 } };
		Integer[][] puntosM = { { 0, 1, 2, 3, 4 }, { 0, 3, 4, 5, 6 } };

		Integer res = 0;

		if (tratamiento) {
			res = 1;
		} else {
			res = 0;
		}

		if (taSistolica < 120) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][0];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][0];
			}
		} else if (taSistolica >= 120 && taSistolica <= 129) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][1];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][1];
			}
		} else if (taSistolica >= 130 && taSistolica <= 139) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][2];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][2];
			}
		} else if (taSistolica >= 140 && taSistolica <= 159) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][3];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][3];
			}
		} else if (taSistolica >= 160) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][4];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][4];
			}
		}
		return puntos;
	}

	private static Integer calcularPunto5(String sexo, Integer edad,
			Boolean tabaquismo) {
		Integer puntos = 0;
		Integer[][] puntosH = { { 0, 0, 0, 0, 0 }, { 8, 5, 3, 1, 1 } };
		Integer[][] puntosM = { { 0, 0, 0, 0, 0 }, { 9, 7, 4, 2, 1 } };

		Integer res = 0;

		if (tabaquismo) {
			res = 1;
		} else {
			res = 0;
		}

		if (edad >= 20 && edad <= 39) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][0];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][0];
			}
		} else if (edad >= 40 && edad <= 49) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][1];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][1];
			}
		} else if (edad >= 50 && edad <= 59) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][2];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][2];
			}
		} else if (edad >= 60 && edad <= 69) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][3];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][3];
			}
		} else if (edad >= 70 && edad <= 79) {
			if (sexo.equalsIgnoreCase("M")) {
				puntos += puntosH[res][4];
			} else if (sexo.equalsIgnoreCase("F")) {
				puntos += puntosM[res][4];
			}
		}

		return puntos;
	}
}
